package cn.lingyangwl.agile.infra.weixin.mp.model.rqrs;

import cn.hutool.core.util.ObjectUtil;
import cn.lingyangwl.agile.model.constants.ValidationCons;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import me.chanjar.weixin.common.api.WxConsts;

import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.NotEmpty;

/**
 * @author shenguangyang
 */
@ApiModel(value = "管理后台 - 公众号素材上传永久")
@Data
public class MpMaterialSaveReq {
    /**
     * @see WxConsts.MediaFileType
     */
    @ApiModelProperty(value = "文件类型 参见 WxConsts.MediaFileType 枚举", required = true, example = "image")
    @NotEmpty(message = "文件类型不能为空")
    private String type;

    @ApiModelProperty(value = "文件路径, 文件服务返回的路径", required = true, example = "http://work01:39000/data/test.jpg")
    @NotEmpty(message = ValidationCons.NOT_EMPTY)
    private String filePath;

    @ApiModelProperty(value = "名字 如果 name 为空，则使用 file 文件名", example = "wechat.mp")
    private String name;

    @ApiModelProperty(value = "视频素材的标题 文件类型为 video 时，必填", example = "视频素材的标题")
    private String title;
    @ApiModelProperty(value = "视频素材的描述 文件类型为 video 时，必填", example = "视频素材的描述")
    private String introduction;

    @AssertTrue(message = "标题不能为空")
    public boolean isTitleValid() {
        // 生成场景为管理后台时，必须设置上级菜单，不然生成的菜单 SQL 是无父级菜单的
        return ObjectUtil.notEqual(type, WxConsts.MediaFileType.VIDEO)
                || title != null;
    }

    @AssertTrue(message = "描述不能为空")
    public boolean isIntroductionValid() {
        // 生成场景为管理后台时，必须设置上级菜单，不然生成的菜单 SQL 是无父级菜单的
        return ObjectUtil.notEqual(type, WxConsts.MediaFileType.VIDEO)
                || introduction != null;
    }
}
